import Vue from 'vue'
import Vuex from 'vuex'
import config from '@/api/config.js';
import {isJsonString} from '@/api/util.js'

Vue.use(Vuex)
 let   thsi=this;
 let iso=0;
 let  tiemi="";
const store = new Vuex.Store({
    state: {
	   websocket:'',
	   // webaddress:"wss://wx.cctobacco.cn/community/websocket",
	   webaddress:"wss://10.33.188.93:8089/community/websocket",
	   is_open_socket: false,// 确保websocket是打开状态
	   params : "?uId=",
	   uId:'',
    },
    mutations: {
      // 进入这个页面的时候创建websocket连接【整个页面随时使用】
      	connectSocketInit(state,uId) {
			store.state.uId=uId;
      		// 创建一个this.websocket对象【发送、接收、关闭socket都由这个对象操作】
      		store.state.websocket = uni.connectSocket({
      			// 【非常重要】必须确保你的服务器是成功的,如果是手机测试千万别使用ws://127.0.0.1:9099【特别容易犯的错误】
      			url: store.state.webaddress+store.state.params+store.state.uId,
      			success(data) {
      				// console.log("websocket连接成功");
      			},
				fail (e) {
					store.state.is_open_socket = false;//设置关闭状态
					// console.log("初始化失败")
				}
      		});
			 
      			
      		// 消息的发送和接收必须在正常连接打开中,才能发送或接收【否则会失败】
      		store.state.websocket.onOpen((res) => {
      			store.state.is_open_socket = true;
      			// 注：只有连接正常打开中 ，才能正常成功发送消息        
				// console.log("websocket链接已打开");
				/* tiemi=setInterval(()=>{
					console.log(iso++)
				},1000)//一分钟执行一次、 */
      			// 注：只有连接正常打开中 ，才能正常收到消息
				
				//心跳
				// console.log("初始化心跳")
				 tiemi=setInterval(()=>{
					store.state.websocket.send({
						data: JSON.stringify({"type":"heart"}),
						success(res) {
							// console.log("发送心跳",res);
						},
						fail(err){
							console.log("心跳失败",err);
							/* this.commit('connectSocketInit')//心跳失败重新初始化 */
						}
					});
				},45000)//一分钟执行一次、

							
      			store.state.websocket.onMessage((res) => {
      				console.log("收到服务器内容：" ,res);  
					let json ;
					if(isJsonString(res.data)){
						json = JSON.parse(res.data);
						if(json.type == "1"){//车辆调配
							console.log("收到服务器内容：" ,typeof(res.data)); 
							uni.showModal({
								title: '收到消息',
								content: '确认查看详情',
								showCancel:false,
								success: function (aes) {
								    if (aes.confirm) {
								        uni.navigateTo({
								        	url:'/pages/acceptIt/acceptIt?data='+res.data
								        })
								    } else if (aes.cancel) {
								        console.log('用户点击取消');
								    }
								}
								
							})	
						}else if(json.type == "2"){
							uni.showModal({
								title: '验签已完成是否查看详情',
								content: '',
								showCancel:false,
								success: function (succ) {
								    if (succ.confirm) {
										/* uni.redirectTo({
											url: '/pages/merchantsSIn/signedInDetail?data='+res.data,
										}) */
										 uni.switchTab({
												url: '/pages/VerificationSigned/merchantsVs',
														}) 
								    } else if (succ.cancel) {
								        console.log('用户点击取消');
								    }
								}
							})	
						}else if(json.type == "3"){
							uni.showModal({
								title: '对方同意了你的请求',
								content: '确认查看详情',
								showCancel:false,
								success: function (succ) {
								    if (succ.confirm) {
										uni.navigateTo({
										    url: '/pages/distribution/distribution',
										});
								    } else if (succ.cancel) {
								        console.log('用户点击取消');
								    }
								}
							})	
						}
					}else{
						console.log("收到服务器内容：" ,typeof(res.data)); 
						uni.showModal({
							title: '收到消息',
							content: res.data,
							showCancel: false,
						})	
					}
					
      			});

      		})
			
			// 这里仅是事件监听【如果socket出现错误会执行】
			store.state.websocket.onError((res) => {
				console.log("发生错误",res)
				store.state.is_open_socket = false;//设置关闭状态
			})
			
      		// 这里仅是事件监听【如果socket关闭了会执行】
      		store.state.websocket.onClose((res) => {
				console.log("链接关闭了",res);
				tiemi=clearInterval(tiemi);
				console.log("关闭心跳",tiemi);
				if(res.code==1000){
					store.state.is_open_socket = false;
					console.log("websocket已经被关闭了")
				}else{
					console.log("1.5秒后重新初始化")
					setTimeout(() => {
					this.commit('connectSocketInit',store.state.uId)
					console.log("重新初始化")
					}, 1500) 
				}
      		})
      	},
      	// 关闭websocket
      	closeSocket() {
      		store.state.websocket.close({
      			success(res) {
      				store.state.is_open_socket = false;
      				console.log("关闭成功", res)
      			},
      			fail(err) {
      				console.log("关闭失败", err)
      			}
      		})
      	},
      send(state,pasm) {
      	if (!store.state.is_open_socket) {
      	this.commit('connectSocketInit',store.state.uId)
      	console.log("重新初始化")
      	}
      	// websocket的服务器的原理是:发送一次消息,同时返回一组数据【否则服务器会进去死循环崩溃】
		store.state.websocket.send({
      		data: JSON.stringify({"uId":pasm.id,"text":pasm.text}),
      		success(res) {
      			console.log("消息发送成功",res);
      		},
      		fail(err){
      			console.log("消息发送失败",err);
      		}
      	});
      },
      	
      }   
})

export default store
